package top.xia17.plugins.fast.user.service;

import top.xia17.plugins.fast.common.database.jpa.extension.JpaDtoService;
import top.xia17.plugins.fast.user.dao.entity.User;
import top.xia17.plugins.fast.user.model.dto.UserDto;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * 用户service
 *
 * @author xia17
 * @date 2022/1/17
 */
public interface UserService extends JpaDtoService<User, UserDto, Long> {

    /**
     * 获取用户名
     *
     * @param username 用户名
     * @return /
     */
    Optional<UserDto> getByUsername(String username);

    /**
     * 通过邮箱查询
     * @param email 邮箱
     * @return /
     */
    Optional<UserDto> getByEmail(String email);

    /**
     * 获取用户的权限信息
     *
     * @param id /
     * @return /
     */
    Set<String> getUserPermissions(Long id);

    /**
     * 设置用户的角色信息
     *
     * @param id      用户ID
     * @param roleIds /
     * @return /
     */
    UserDto setUserRoles(Long id, List<Long> roleIds);

    /**
     * 注册用户
     *
     * @param user              用户信息
     * @param passwordGenerator 密码生成器
     * @return /
     */
    UserDto register(User user, String passwordGenerator);
}
